# 注释ctrl+/快捷键
# 关键字是编程语言中被事先定义好的单词，也叫保留字
'''['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await',
'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except',
'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 
'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 
'try', 'while', 'with', 'yield']'''
# 变量，函数，类型，对象名···统称为标识符（数字不能开头，a-z，A-Z，0-9，_）
# python语言严格区分大小写
##变量##########################################################################################
name = '玛丽亚'
nama = 'abcdef'
namb = "abcdee"
namc = '''abcd'''
namd = """acda"""
num1 = 123 #python不需要指定数据类型，会自动确定！
num2 = 12.3
num1,num3 = 123,12 #逗号表达式
is_visited = True #False 布尔
nams = ['张三','李四','王五'] #列表类型，有序可重可扩     
namss = ('张三','李四','王五') #元组类型，有序可重
namsss = {'张三','李四','王五'} #集合类型，无序不重
stu = {'ID':'1001','姓名':'张三','年龄':'18'} #字典类型，有键值对

##输入输出##########################################################################################
#put = input('提示信息 请输入') #返回结果都是字符串类型
print('hello word 你好世界')
print(f'hello {name}')#f 格式化，用于在字符串中插入变量名
print('苹果%f元,购买了%d斤'%(num2,num1))#占位符 %s字符串占位 （%.1f,%.2f保留1位或2位小数）
print('苹果{0}元,购买了{1}斤'.format(num2,num1))
##类型转换##########################################################################################
num3 = '10'
num4 = '20'        #浮点转整形截断小数部分
nuzz = num3 + num4 #两个字符串相加为拼接 为1020
nuzz = int(num3) + int(num4) #为30
#浮点float()，字符str（）repr（）//chr（unicode编码）ord（转换为unicoder编码）
##条件语句##################################################################################################
if 16>13:
    print('进入选择语句1')
    print('进入选择语句2')

if 16>33:
    print('进入双分支语句1')
else:
    print('进入双分支语句2')

if 16>55:
    print('进入多分支语句1')
elif 16>22:
    print('进入多分支语句2')
elif 16>11:
    print('进入多分支语句3')
else:
    print('进入多分支语句4')
              #基于双分支的三目运算符
print('条件成立结果') if 36>12 else print('条件不成立')
numm = num1 if num1>num2 else num2
##循环##############################################################################################################
i = 0
while i<10:
    i = i+1
    print(f'循环输出{i}')

range(1,11,1) #用来生成指定范围的序列(初始值，结束值（不包含），每次增加值)

for s in range(1,11,1):
    print(s)
    break #跳出当前循环
    continue #终止本次循环，进入下次循环

##随机数#########################################################################################################
import random
numm = random.randint(1,9)#得到1-9之间任意一个数

##函数###############################################################################################
def hanshuming(a,b=1,*args,**c):
    #a为固定，b为默认值，若有传递值会覆盖默认，*args为可变,c属于可变
    print('1')
    print(b)
    return '22' 
##类#########################################################################################################
#属性有类和对象之分
#类 的函数，变量：可以直接通过类名+点来调用，也可以通过对象+点来调用(b,chi)
#对象 的函数，变量：只能通过类实例化后的对象来调用 （a,ku,__xiao）
class AA:               #self指定此变量为类AA所有，使用时需要通过AA的实例化对象+点来调用
    b = 2               #这里的b为类的属性，可以通过AA.b来调用，也可以通过AA的实例化对象+点来调用
    def __init__(self,a): #初始化函数，可无变量a
        self.a = a
    def ku (self):
        print("动作哭",self.a)
    def __xiao(self):     #函数、变量命前加两个下划线，设为私有，子类无法继承
        pass        
    @classmethod 
    def chi(self):#加classmethod变为类的函数
        print("吃的动作")       
lei = AA(1)          #会直接调用初始化函数
print(lei.a)  ,  lei.ku()


class BB(AA):#BB为子类，会继承父类的属性和函数      
    #def __init__(self, a):  
    #    super().__init__(a)#这两行是【子类】的初始化函数，系统默认会有
    pass
bb = BB(2)                  #因为父类AA有参数a，因此其子类也需要传参
bb.ku()


class CC(AA):             #多态
    def ku(self):         #子类中有和父类同名的函数，优先子类的
        print("C不想哭")
ccc = CC(2)
ccc.ku()
#########################################################################
#列表  []  可变  有序  可重
#字典  {:} 可变  无序  可重
#元组  ()  不可  有序  可重
#集合  {}  可变  无序  不可
#字符  ''  不可  有序  可重
#########################################################################
#列表：
list1 = [1,2,3,4,5]
list1.append(6)   #尾插6
list1.insert(0,6) #位插6
list1.extend(1,2) #多插1，2
list1.pop(1)      #位删
#del list1(2)      #位删
list1.remove(3)   #值删3
list1[1] = 8      #位改
#杂项
list1.count(4)    #统计4出现的次数
list1.reverse()   #反转列表
list1.sort()      #排序，默认升序参数：reverse=True降序
x = sorted(list1) #排序，默认升序，不影响原来的列表
#关于拷贝
l = [1,2]
k = l     #浅拷贝，此时修改l时会影响k
k = l[:]  #深拷贝
k = l.copy()#深拷 
print(list1)
#######################################################################
#字典：
ss = {"see":3},s = {}
s = {"one":1,"too":2}                     #
s = dict(zip(["one","too","see"],[1,2,3]))#二维创建
s = dict.fromkeys(["one","too"],2)        #同值创建
s["one"] = 9            #one存在时为修改,不在时为添加
s.clear()                                 #删除所有
s.pop("one","不存在！")            #按键删，并返回值
#del s["one"]                               #按键删
s.update(ss) #将新字典添加到当前字典中，如存在相同的键则更新当前字典
s.items(),s.keys(),s.values() #配合for使用，遍历键值
########################################################################
#元组：
a = (1,)
c = ("a",'b',1,2,3)
c = "a",'b',1,2,3           #用下标访问，用for输出
h = c + a                   #合并
p = tuple(h)                #将h转换为元组
#内置的还有len(),max(),min()
#########################################################################
#集合：                    只能通过for遍历
m1 = set()
m2 = {1,2,3}
m1.add(4)          #增
m1.update({5,6,7}) #多增
m1.discard(1)      #值删
m1.remove(1)       #值删，没有会报错
m1.pop()           #随机删1个
m1.clear()         #全删
m1.intersection(m2)#返回交集
m1.union(m2)       #返回并集
m1-m2,m1.difference(m2)#返回1中2没有的，差集
m1.symmetric_difference(m2)#返回非共同元素，对称差集
##########################################################################
#字符串：
z1 = '',z1 = """1234""",z1 = '''1234'''
z2 = "123"
z3 = z2[0:3:1] #切片
z4 = z2 + z3   #拼接
z4 = ','.join(z2,z3)#用，号拼接
s2="⼤家好，我的名字叫{0}，今年{1}岁，性别{2}"
s2.format('逍遥',18,'⼥')#格式化
z2.split('2')  #分割为列表[1,3] 默认按照空格分
z2.replace(2,22,k) #将2换成22,k可不写，写的话替换前k个
z1.lower() #返回小写版本
z1.upper() #返回大写版本
z1.count(2)#返回2出现的次数
z1.find(2) #返回2第一次出现的索引，无则返回-1
z1.lstrip(),z1.rsplit()#移除左右的字符，默认为空格
for i in z1:
    if i.isdigit(): 1#判断数字
    elif i.isspace(): 1#判断空格
    elif i.isalpha(): 1#判断字母
    else: 1
#########################################################################################################################   
